﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace GestionEducativa.DataLayer
{
    public class RecibosRepository
    {
        Gestion_EducativaEntities ObjectContex = new Gestion_EducativaEntities();

        public void InsertarRecibo(Recibos r)
        {
            ObjectContex.AddToRecibos(r);
            ObjectContex.SaveChanges();
        }

        public void BorrarRecibos(int idr)
        {
            Recibos r = (from rx in ObjectContex.Recibos where rx.idrecibo == idr select rx).First();
            ObjectContex.Recibos.DeleteObject(r);
            ObjectContex.SaveChanges();
        }

        public void BorrarRecibosPorFatura(int idf)
        {
            Recibos r = (from rx in ObjectContex.Recibos where rx.idfactura == idf select rx).First();
            
            ObjectContex.Recibos.DeleteObject(r);   
            
            ObjectContex.SaveChanges();
        }

        public void ActualizarRecibo(Recibos rb)
        {
            Recibos r = (from rx in ObjectContex.Recibos where rx.idrecibo == rb.idrecibo select rx).First();

            r.monto = rb.monto;
            r.fecha = rb.fecha;

            ObjectContex.SaveChanges();
        }

        public IEnumerable<Recibos> TraerTodosRecibos()
        {
            IEnumerable<Recibos> Listr = (from rx in ObjectContex.Recibos select rx).AsEnumerable();
            return Listr;
        }

        public IEnumerable<Recibos> TraerRecibos(int idr)
        {
            IEnumerable<Recibos> r = (from rx in ObjectContex.Recibos where rx.idrecibo == idr select rx).AsEnumerable();
            return r;
        }

        public IEnumerable<Recibos> TraerRecibosPorFactura(int idf)
        {
            IEnumerable<Recibos> r = (from rx in ObjectContex.Recibos where rx.idfactura == idf select rx).AsEnumerable();
            return r;
        }

        public IEnumerable<Recibos> TraerReciboseFacturaPorFecha(int idf, DateTime fecha1, DateTime fecha2)
        {
            IEnumerable<Recibos> rpf = (from rx in ObjectContex.Recibos where rx.idfactura == idf && rx.fecha >= fecha1 && rx.fecha <= fecha2 select rx).AsEnumerable();
            return rpf;
        }
        public IEnumerable<Recibos> TraerRecibosePorFecha(DateTime fecha1, DateTime fecha2)
        {
            IEnumerable<Recibos> rpf = (from rx in ObjectContex.Recibos where rx.fecha >= fecha1 && rx.fecha <= fecha2 select rx).AsEnumerable();
            return rpf;
        }

        public IEnumerable<Recibos> TraerRecibosEstudiantes(string mat)
        {
            IEnumerable<int> rpe = (from fx in ObjectContex.Facturas where fx.matricula == mat select fx.idfactura).AsEnumerable();

            List<Recibos> rblist = new List<Recibos>();
            foreach (int id in rpe)
            {
                rblist.AddRange(from rx in ObjectContex.Recibos where rx.idfactura == id select rx);
            }
            return rblist.AsEnumerable();
        }

        public IEnumerable<Recibos> TraerRecibosEstudiantesFechas(string mat, DateTime fecha1, DateTime fecha2)
        {
            IEnumerable<int> rpe = (from fx in ObjectContex.Facturas where fx.matricula == mat select fx.idfactura).AsEnumerable();

            List<Recibos> rblist = new List<Recibos>();
            foreach (int id in rpe)
            {
                rblist.AddRange(from rx in ObjectContex.Recibos where rx.idfactura == id && rx.fecha >= fecha1 && rx.fecha <= fecha2 select rx);
            }
            return rblist.AsEnumerable();
        }
    }
}